//package stateKit;
//
//
//import cn.hutool.core.date.DateBetween;
//import cn.hutool.core.date.DateUnit;
//import cn.hutool.core.date.DateUtil;
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//
//import java.text.DateFormat;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.time.*;
//import java.time.format.DateTimeFormatter;
//import java.time.temporal.TemporalAdjusters;
//import java.util.*;
//
///**
// * 严格的日期转换，改变自己DateUtil，在原来基础上增加了setLenient(false); setLenient public void
// * setLenient(boolean
// * lenient)指定日期/时间解析是否不严格。进行不严格解析时，解析程序可以使用启发式的方法来解释与此对象的格式不精确匹配的输入。进行严格解析时，输入必须匹配此对象的格式。
// * 参数： lenient - 为 true 时，解析过程是不严格的 不会自动将错误日期转换为正确的日期
// * 例如:19450000,使用原DateUtil会转换为19441130
// */
//public class DateUtils {
//
//    private final static Log logger = LogFactory.getLog(cn.bocon.smartwater.business.common.utils.DateUtils.class);
//
//    public static final String COMPACT_DATE_FORMAT = "yyyyMMdd";
//    public static final String Y = "yyyy";
//    public static final String Y_M_D_H = "yyyy-MM-dd HH";
//
//    public static final String YM = "yyyyMM";
//    public static final String Y_M = "yyyy-MM";
//    public static final String DATE_FORMAT = "yyyy-MM-dd";
//    public static final String CHINESEDATE_FORMAT = "yyyy年MM月dd日 HH:mm:ss";
//    public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
//    public static final String DATETIME_GPS_FORMAT = "yyyy/MM/dd HH:mm:ss";
//    public static final String YMD = "yyyy/MM/dd HH:mm:ss";
//    public static final String DATA_PACKAGE_FORMAT = "yyyyMMddHHmmss";
//    public static final String DATE_ALL = "yyyyMMddHHmmssSSS";
//
//    public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(DATETIME_FORMAT);
//
//    private DateUtils(){}
//
//    public static Date getYesterday00() {
//        Calendar cal = Calendar.getInstance();
//        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//        cal.add(Calendar.DATE, -1);
//        return cal.getTime();
//    }
//
//    /**
//     * 获取上一个小时的时间
//     * @return
//     */
//    public static Date getPreHours() {
//        Calendar calendar = Calendar.getInstance();
//        // HOUR_OF_DAY 指示一天中的小时
//        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);
//        return calendar.getTime();
//    }
//
//    /**
//     * date1-date2 相差多少天
//     *
//     * @param endDate
//     * @param startDate
//     * @return
//     */
//    public static int compareDays(Date endDate, Date startDate) {
//        long disSes = endDate.getTime() - startDate.getTime();
//        return (int) (disSes / (1000 * 60 * 60 * 24));
//    }
//
//    /**
//     * date1-date2 相差多少小时
//     *
//     * @param endDate
//     * @param nowDate
//     * @return
//     */
//    public static int compareHours(Date endDate, Date nowDate) {
//        long nd = 1000L * 24 * 60 * 60;
//        long nh = 1000L * 60 * 60;
//        // long ns = 1000;
//        // 获得两个时间的毫秒时间差异
//        long diff = endDate.getTime() - nowDate.getTime();
//
//        // 计算差多少小时
//        long hour = diff / nh;
//        return (int) hour;
//    }
//
//    /**
//     * 判断两个日期相差的时长
//     *
//     * @param dataTime 2020-08-18 00:00:00～2020-08-18 04:00:00
//     * @param unit     相差的单位：相差 天{@link DateUnit#DAY}、小时{@link DateUnit#HOUR} 等
//     * @return 日期差
//     * @since 3.3.1
//     */
//    public static long compareHours(String dataTime, DateUnit unit) {
//        String[] split = dataTime.split("~");
//        Date beginDate = stringToDate(split[0], DATETIME_FORMAT);
//        Date endDate = stringToDate(split[1], DATETIME_FORMAT);
//        assert beginDate != null;
//        assert endDate != null;
//        long between = new DateBetween(beginDate, endDate).between(unit);
//        return between + 1;
//    }
//
//    /**
//     * @return 以 yyyy-mm-dd 形式返回当前日期
//     */
//    public static String getCurrentDateString() {
//        return getNowDate(DATE_FORMAT);
//    }
//
//    /**
//     * @param format yyyy-MM-dd HH:mm:ss:S 年月日时分秒毫杪
//     * @return
//     */
//    public static String getNowDate(String format) {
//        String dateTime = "";
//        try {
//            Date now = new Date();
//            SimpleDateFormat sdf = new SimpleDateFormat(format);
//            dateTime = sdf.format(now);
//        } catch (Exception e) {
//            e.printStackTrace();
//            logger.error(e);
//        }
//        return dateTime;
//    }
//
//    public static Date stringToDate(String dateString, String formatString) {
//        SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(formatString);
//        localSimpleDateFormat.setLenient(false);
//        try {
//            return localSimpleDateFormat.parse(dateString);
//        } catch (ParseException localParseException) {
//            localParseException.printStackTrace();
//        }
//        return null;
//    }
//
//    public static String dateToString(Date paramDate, String paramString) {
//        SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(paramString);
//        localSimpleDateFormat.setLenient(false);
//        return localSimpleDateFormat.format(paramDate);
//    }
//
//    public static Date addDays(Date paramDate, int paramInt) {
//        Calendar localCalendar = Calendar.getInstance();
//        localCalendar.setTime(paramDate);
//        int i = localCalendar.get(Calendar.DAY_OF_YEAR);
//        localCalendar.set(Calendar.DAY_OF_YEAR, i + paramInt);
//        return localCalendar.getTime();
//    }
//
//    /**
//     * Date转字符串yyyy-MM-dd格式
//     *
//     * @param paramDate
//     * @return
//     */
//    public static String formatDate(Date paramDate) {
//        if (paramDate == null) {
//            return null;
//        }
//        SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
//        localSimpleDateFormat.setLenient(false);
//        return localSimpleDateFormat.format(paramDate);
//    }
//
//    /**
//     * Date   转字符串
//     * format 时间格式
//     *
//     * @param paramDate
//     * @return
//     */
//    public static String formatDate(Date paramDate, String format) {
//        if (paramDate == null) {
//            return null;
//        }
//        SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(format);
//        localSimpleDateFormat.setLenient(false);
//        return localSimpleDateFormat.format(paramDate);
//    }
//
//    /**
//     * Date转字符串yyyy-MM-dd HH:mm:ss格式
//     *
//     * @param paramDate
//     * @return
//     */
//    public static String formatDateTime(Date paramDate) {
//        if (paramDate == null) {
//            return "-";
//        }
//        SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(DATETIME_FORMAT);
//        localSimpleDateFormat.setLenient(false);
//        return localSimpleDateFormat.format(paramDate);
//    }
//
//    /**
//     * 字符串日期yyyy-MM-dd转日期类型
//     *
//     * @param paramString
//     * @return
//     * @throws Exception
//     */
//    public static Date parseDate(String paramString) throws Exception {
//        if ((paramString == null) || (("").equals(paramString.trim()))) {
//            return null;
//        }
//        SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(DATE_FORMAT);
//        localSimpleDateFormat.setLenient(false);
//        try {
//            return localSimpleDateFormat.parse(paramString);
//        } catch (ParseException localParseException) {
//            throw new Exception("日期解析出错！", localParseException);
//        }
//    }
//
//    /**
//     * 字符串日期yyyy-MM-dd HH:mm:ss 转日期
//     *
//     * @param paramString
//     * @return
//     */
//    public static Date parseDateTime(String paramString) {
//        SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT);
//        try {
//            return sdf.parse(paramString);
//        } catch (ParseException e) {
//            throw new BaseException("时间格式转换出错:" + paramString);
//        }
//    }
//
//    /**
//     * 格式化时间 yyyy-MM-dd
//     *
//     * @return
//     */
//    public static Date parseDateTime(String paramString, String format) {
//        SimpleDateFormat sdf = new SimpleDateFormat(format);
//        try {
//            return sdf.parse(paramString);
//        } catch (ParseException e) {
//            throw new BaseException("时间格式:[" + format + "]装换出错:" + paramString);
//        }
//    }
//
//    public static Date addMonths(Date paramDate, int paramInt) {
//        Calendar localCalendar = Calendar.getInstance();
//        localCalendar.setTime(paramDate);
//        localCalendar.add(Calendar.MONTH, paramInt);
//        return localCalendar.getTime();
//    }
//
//    public static String getChineseDate(Date date) {
//        Calendar paramCalendar = Calendar.getInstance();
//        paramCalendar.setTime(date);
//
//        int i = paramCalendar.get(Calendar.YEAR);
//        int j = paramCalendar.get(Calendar.MONTH);
//        int k = paramCalendar.get(Calendar.DATE);
//        int l = paramCalendar.get(Calendar.HOUR_OF_DAY);
//        int m = paramCalendar.get(Calendar.MINUTE);
//        int n = paramCalendar.get(Calendar.SECOND);
//        StringBuilder sb = new StringBuilder();
//        sb.append(i);
//        sb.append("年");
//        sb.append(j + 1);
//        sb.append("月");
//        sb.append(k);
//        sb.append("日 ");
//        sb.append(l);
//        sb.append(":");
//        sb.append(m);
//        sb.append(":");
//        sb.append(n);
//        return sb.toString();
//    }
//
//    /**
//     * 获取某年第一天的开始时间Str
//     *
//     * @param year 年份
//     * @return Date
//     */
//    public static String getYearFirst(int year) {
//        Calendar calendar = Calendar.getInstance();
//        calendar.clear();
//        calendar.set(Calendar.YEAR, year);
//
//        return dateToString(calendar.getTime(), DATE_FORMAT) + " 00:00:00";
//    }
//
//    /**
//     * 获取某年最后一天的结束时间Str
//     *
//     * @param year 年份
//     * @return Date
//     */
//    public static String getYearLast(int year) {
//        Calendar calendar = Calendar.getInstance();
//        calendar.clear();
//        calendar.set(Calendar.YEAR, year);
//        calendar.roll(Calendar.DAY_OF_YEAR, -1);
//
//        return dateToString(calendar.getTime(), DATE_FORMAT) + " 23:59:59";
//    }
//
//    /**
//     * 获得某月的开始时间，即2012-01-01 00:00:00
//     *
//     * @param year  年份
//     * @param month 月份
//     * @return
//     */
//    public static String getMonthStartTime(int year, int month) {
//        Calendar c = Calendar.getInstance();
//        c.set(Calendar.DATE, 1);
//        //设置年份
//        c.set(Calendar.YEAR, year);
//        //设置月份
//        c.set(Calendar.MONTH, month - 1);
//        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
//                c.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//        return formatDateTime(c.getTime());
//    }
//
//    /**
//     * 获得某月的结束时间，即2012-01-31 23:59:59
//     *
//     * @param year  年份
//     * @param month 月份
//     * @return
//     */
//    public static String getMonthEndTime(int year, int month) {
//        Calendar c = Calendar.getInstance();
//        c.set(Calendar.DATE, 1);
//        //设置年份
//        c.set(Calendar.YEAR, year);
//        //设置月份
//        c.set(Calendar.MONTH, month);
//        c.add(Calendar.DATE, -1);
//        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
//                c.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
//        return formatDateTime(c.getTime());
//    }
//
//    /**
//     * 获取当前开始时间
//     *
//     * @return
//     */
//    public static String getCurrentStartTime() {
//        String nyr = cn.bocon.smartwater.business.common.utils.DateUtils.getCurrentDateString();
//        return nyr + " 00:00:00";
//    }
//
//    /**
//     * 获取当前开始时间
//     *
//     * @return
//     */
//    public static Date getCurrentDayStartTime() {
//        String nyr = cn.bocon.smartwater.business.common.utils.DateUtils.getCurrentDateString();
//        String todayStartString = nyr + " 00:00:00";
//        return cn.bocon.smartwater.business.common.utils.DateUtils.stringToDate(todayStartString, cn.bocon.smartwater.business.common.utils.DateUtils.DATETIME_FORMAT);
//    }
//
//    /**
//     * 获取${dateTime}开始时间
//     *
//     * @param dateTime 格式yyyy-MM-dd
//     * @return
//     */
//    public static Date getCurrentDayStartTime(String dateTime) {
//        String todayStartString = dateTime + " 00:00:00";
//        return cn.bocon.smartwater.business.common.utils.DateUtils.stringToDate(todayStartString, cn.bocon.smartwater.business.common.utils.DateUtils.DATETIME_FORMAT);
//    }
//
//    /**
//     * 获取当前结束时间
//     *
//     * @return Date
//     */
//    public static Date getCurrentDayEndTime() {
//        Calendar todayEnd = Calendar.getInstance();
//        todayEnd.set(Calendar.HOUR_OF_DAY, 23);
//        todayEnd.set(Calendar.MINUTE, 59);
//        todayEnd.set(Calendar.SECOND, 59);
//        todayEnd.set(Calendar.MILLISECOND, 999);
//        return todayEnd.getTime();
//    }
//
//    /**
//     * 获取当天结束时间
//     *
//     * @return Date
//     * @dateTime 格式yyyy-MM-dd
//     */
//    public static Date getCurrentDayEndTime(String dateTime) {
//        String todayStartString = dateTime + " 23:59:59";
//        return cn.bocon.smartwater.business.common.utils.DateUtils.stringToDate(todayStartString, cn.bocon.smartwater.business.common.utils.DateUtils.DATETIME_FORMAT);
//    }
//
//    /**
//     * 获取当天结束时间
//     *
//     * @return Date
//     * @dateTime 格式yyyy-MM-dd
//     */
//    public static String getCurrentEndTime() {
//        String nyr = cn.bocon.smartwater.business.common.utils.DateUtils.getCurrentDateString();
//        return nyr + " 23:59:59";
//    }
//
//    /**
//     * 功能描述: 按类型进行格式化时间
//     *
//     * @param dataForm 时间格式
//     * @param dateTime 时间
//     * @return
//     * @date 上午 9:30 2019/6/26 0026
//     */
//    public static String formDate(String dataForm, Date dateTime) throws Exception {
//        if ((dataForm == null) || ("".equals(dataForm))) {
//            return null;
//        }
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dataForm);
//
//        try {
//            return simpleDateFormat.format(dateTime);
//        } catch (Exception localParseException) {
//            throw new Exception("日期解析出错！", localParseException);
//        }
//    }
//
//    /**
//     * 功能描述:
//     *
//     * @param dateTime 时间
//     * @param subTime  格式类型
//     * @return
//     * @date 上午 9:31 2019/6/26 0026
//     */
//    public static String formDate(Date dateTime, int subTime) throws Exception {
//        if ((dateTime == null)) {
//            return null;
//        }
//
//        String dataForm;
//
//        switch (subTime) {
//            case 1:
//            case 2:
//                dataForm = Y_M_D_H;
//                break;
//            case 3:
//            case 4:
//                dataForm = DATE_FORMAT;
//                break;
//            case 5:
//                dataForm = "yyyy-MM";
//                break;
//            default:
//                dataForm = DATETIME_FORMAT;
//                break;
//        }
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dataForm);
//        try {
//            return simpleDateFormat.format(dateTime);
//        } catch (Exception localParseException) {
//            throw new Exception("日期解析出错！", localParseException);
//        }
//    }
//
//    public static Date getToday() {
//        try {
//            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
//            return sdf.parse(sdf.format(new Date()));
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 生成dataTime的时间 00:00:00, 00:00:30等
//     *
//     * @return pastDaysList 日期数组 日期格式：yyyyMMdd
//     */
//    public static List<String> getTimeByYear(int year, int second) {
//        DateFormat df = new SimpleDateFormat(DATETIME_FORMAT);
//        DateFormat df2 = new SimpleDateFormat("HHmmss");
//        String endDateStr = year + "-01-01 23:59:59";
//        Date endDate = null;
//
//        try {
//            endDate = df.parse(endDateStr);
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//
//        List<String> resultList = Lists.newArrayList();
//        Date date = new Date();
//        Date beginOfYear = DateUtil.beginOfYear(date);
//        Calendar cal = Calendar.getInstance();
//        if (beginOfYear != null) {
//            cal.setTime(beginOfYear);
//            cal.set(Calendar.YEAR, year);
//        }
//
//        if (endDate != null) {
//            while (beginOfYear.before(endDate)) {
//                String format = df2.format(beginOfYear);
//                resultList.add(format);
//                cal.add(Calendar.SECOND, second);
//                beginOfYear = cal.getTime();
//            }
//        }
//
//        return resultList;
//    }
//
//    /**
//     * 生成年月日 20190101 20190102等
//     *
//     * @return pastDaysList 日期数组 日期格式：yyyyMMdd
//     */
//    public static List<String> getDateByYear(int year) {
//        DateFormat df = new SimpleDateFormat(DATETIME_FORMAT);
//        DateFormat df2 = new SimpleDateFormat("yyyyMMdd");
//        String endDateStr = year + "-12-31 23:59:59";
//        Date endDate = null;
//        try {
//            endDate = df.parse(endDateStr);
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//        List<String> resultList = Lists.newArrayList();
//        Date date = new Date();
//        Date beginOfYear = DateUtil.beginOfYear(date);
//        Calendar cal = Calendar.getInstance();
//        if (beginOfYear != null) {
//            cal.setTime(beginOfYear);
//            cal.set(Calendar.YEAR, year);
//        }
//        beginOfYear = cal.getTime();
//
//        if (endDate != null) {
//            while (beginOfYear.before(endDate)) {
//                String format = df2.format(beginOfYear);
//                resultList.add(format);
//                cal.add(Calendar.DAY_OF_MONTH, 1);
//                beginOfYear = cal.getTime();
//            }
//        }
//
//        return resultList;
//    }
//
//    /**
//     * 获取过去第几天的日期
//     *
//     * @param past
//     * @return
//     */
//    public static String getPastDate(int past, Date date) {
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - past);
//        Date today = calendar.getTime();
//        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
//        return sdf.format(today);
//    }
//
//    /**
//     * 字符串时间日期转格式
//     *
//     * @param data   字符串时间日期
//     * @param format 转换的格式有：yyyyMMdd，yyyy-MM-dd HH:mm:ss 等
//     * @return
//     * @throws ParseException
//     */
//    public static String conversionTimeFormat(String data, String format) throws ParseException {
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
//        Date pastDate = simpleDateFormat.parse(data);
//        return simpleDateFormat.format(pastDate);
//    }
//
//    /**
//     * 根据周几查询日期字符串列表
//     *
//     * @param week      0表示周日，1表示周一
//     * @param beginDate
//     * @param endDate
//     * @return
//     */
//    public static List<Date> listByDayOfWeek(int week, Date beginDate, Date endDate) throws Exception {
//        Preconditions.checkNotNull(beginDate);
//        Preconditions.checkNotNull(endDate);
//        if (beginDate.after(endDate)) {
//            throw new Exception("开始日期应小于等于结束日期");
//        }
//        List<Date> list = Lists.newArrayList();
//        Calendar cal = Calendar.getInstance();
//
//        while (beginDate.before(endDate) || beginDate.equals(endDate)) {
//            int dayOfWeek = DateUtil.dayOfWeek(beginDate);
//            if ((dayOfWeek - 1) == week) {
//                list.add(beginDate);
//            }
//            cal.setTime(beginDate);
//            cal.add(Calendar.DAY_OF_MONTH, 1);
//            beginDate = cal.getTime();
//        }
//        return list;
//    }
//
//    /**
//     * 根据日查询日期字符串列表
//     *
//     * @param day       几号
//     * @param beginDate
//     * @param endDate
//     * @return
//     */
//    public static List<Date> listByDayOfMonth(int day, Date beginDate, Date endDate) throws Exception {
//        Preconditions.checkNotNull(beginDate);
//        Preconditions.checkNotNull(endDate);
//        if (beginDate.after(endDate)) {
//            throw new Exception("开始日期应小于等于结束日期");
//        }
//        List<Date> list = Lists.newArrayList();
//
//        while (beginDate.before(endDate) || beginDate.equals(endDate)) {
//            Calendar cal = Calendar.getInstance();
//            cal.setTime(beginDate);
//            int dayOfWeek = cal.get(Calendar.DAY_OF_MONTH);
//            if (dayOfWeek == day) {
//                list.add(beginDate);
//            }
//            cal.add(Calendar.DAY_OF_MONTH, 1);
//            beginDate = cal.getTime();
//        }
//        return list;
//    }
//
//    /**
//     * 获取上个月的第一天和最后一天,返回键：startMonthDay(上月第一天)，lastMonthDay(上月最后一天)
//     *
//     * @return
//     */
//    public static Map<String, Object> getStartAndLastMonthDay() {
//        Map<String, Object> map = new HashMap<>();
//        Calendar c = Calendar.getInstance();
//        c.add(Calendar.MONTH, -1);
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd  HH:mm:ss");
//        int lastMonthMaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
//        c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), lastMonthMaxDay, 23, 59, 59);
//
//        //按格式输出
//        String gtime = sdf.format(c.getTime()); //上月最后一天
//        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-01  00:00:00");
//        String gtime2 = sdf2.format(c.getTime()); //上月第一天
//        map.put("startMonthDay", gtime2);
//        map.put("lastMonthDay", gtime);
//        return map;
//    }
//
//    //==========================================获取上个季度的时间范围===========
//
//    /**
//     * 获取上个季度的时间范围,返回键：startQuarterDay（开始时间），lastQuarterDay（结束时间）
//     *
//     * @return
//     */
//    public static int getQuarterByDate(Date date) {
//        Calendar calendar = Calendar.getInstance();
//        calendar.setTime(date);
//        int month = calendar.get(Calendar.MONTH) + 1;
//
//        if (month <= 3) {
//            return 1;
//        } else if (month <= 6) {
//            return 2;
//        } else if (month <= 9) {
//            return 3;
//        } else if (month <= 12) {
//            return 4;
//        } else {
//            return 1;
//        }
//    }
//
//    /**
//     * 获取上周的开始时间日期和结束时间日期（周日到周六表示为一周）
//     * <p>周日(key:lastSunday)：表示为上周的开始时间 </p>
//     * <p>周六(key:lastSaturday)：表示为上周的结束时间</p>
//     *
//     * @return Map<String, Object>
//     */
//    public static Map<String, Object> getLastTimeIntervalSatAndSun() {
//        Map<String, Object> map = new HashMap<>();
//        SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT);
//        Calendar calendar1 = Calendar.getInstance();
//        Calendar calendar2 = Calendar.getInstance();
//        int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1;
//        int offset1 = -dayOfWeek;
//        int offset2 = 6 - dayOfWeek;
//        calendar1.add(Calendar.DATE, offset1 - 7);
//        calendar2.add(Calendar.DATE, offset2 - 7);
//        //System.out.println(sdf.format(calendar1.getTime()));// last Monday
//        String lastBeginDate = sdf.format(calendar1.getTime());
//        //System.out.println(sdf.format(calendar2.getTime()));// last Sunday
//        String lastEndDate = sdf.format(calendar2.getTime());
//        map.put("lastSunday", lastBeginDate);//周日
//        map.put("lastSaturday", lastEndDate);//周六
//        return map;
//    }
//
//    /**
//     * 获取两个日期之间的所有日期集合
//     *
//     * @param startTime
//     * @param endTime
//     * @param format    时间格式，如：yyyy-MM-dd
//     * @return
//     */
//    public static List<String> getDays(String startTime, String endTime, String format) {
//        // 返回的日期集合
//        List<String> days = new ArrayList<>();
//        DateFormat dateFormat = new SimpleDateFormat(format);
//        try {
//            Date start = dateFormat.parse(startTime);
//            Date end = dateFormat.parse(endTime);
//
//            Calendar tempStart = Calendar.getInstance();
//            tempStart.setTime(start);
//
//            Calendar tempEnd = Calendar.getInstance();
//            tempEnd.setTime(end);
//            tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
//            while (tempStart.before(tempEnd)) {
//                days.add(dateFormat.format(tempStart.getTime()));
//                tempStart.add(Calendar.DAY_OF_YEAR, 1);
//            }
//        } catch (ParseException e) {
//            e.printStackTrace();
//        }
//        Collections.sort(days);
//        return days;
//    }
//
//    /**
//     * 根据字符串时间格式获年
//     *
//     * @param dateTime 如2020-04-29 00:00:00
//     * @return
//     */
//    public static int getYear(String dateTime) {
//        return Integer.parseInt(dateTime.substring(0, 4));
//    }
//
//    public static Date getCurrentMonthStartTime(String month) {
//
//        Calendar c = Calendar.getInstance();
//        try {
//            Date date = parseDateTime(month, Y_M);
//            c.setTime(date);
//            c.set(Calendar.DATE, 1);
//            return c.getTime();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    public static Date getCurrentMonthEndTime(String month) {
//
//        Calendar c = Calendar.getInstance();
//        try {
//            Date date = parseDateTime(month, Y_M);
//            c.setTime(date);
//
//            c.set(Calendar.DATE, 1);
//            c.add(Calendar.MONTH, 1);
//            c.add(Calendar.DATE, -1);
//
//            c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
//                    c.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
//            c.set(Calendar.MILLISECOND, 999);
//
//            return c.getTime();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//
//    }
//
//    /**
//     * 获取两个指定日期之间的所有月份
//     *
//     * @param beginTime 开始时间
//     * @param endTime   结束时间
//     * @return
//     */
//    public static List<String> getMonthsBetweenTwoSpecifiedDates(String beginTime, String endTime) {
//        //月份集合
//        List<String> list = new ArrayList<>();
//        try {
//            Date startDate = new SimpleDateFormat("yyyy-MM").parse(beginTime);
//            Date endDate = new SimpleDateFormat("yyyy-MM").parse(endTime);
//
//            Calendar calendar = Calendar.getInstance();
//            calendar.setTime(startDate);
//            // 获取开始年份和开始月份
//            int startYear = calendar.get(Calendar.YEAR);
//            int startMonth = calendar.get(Calendar.MONTH);
//            // 获取结束年份和结束月份
//            calendar.setTime(endDate);
//            int endYear = calendar.get(Calendar.YEAR);
//            int endMonth = calendar.get(Calendar.MONTH);
//            //月份集合
//            //List<String> list = new ArrayList<String>();
//            //遍历组装月份集合
//            for (int i = startYear; i <= endYear; i++) {
//                String date;
//                if (startYear == endYear) {
//                    for (int j = startMonth; j <= endMonth; j++) {
//                        if (j < 9) {
//                            date = i + "-0" + (j + 1);
//                        } else {
//                            date = i + "-" + (j + 1);
//                        }
//                        list.add(date);
//                    }
//
//                } else {
//                    if (i == startYear) {
//                        for (int j = startMonth; j < 12; j++) {
//                            if (j < 9) {
//                                date = i + "-0" + (j + 1);
//                            } else {
//                                date = i + "-" + (j + 1);
//                            }
//                            list.add(date);
//                        }
//                    } else if (i == endYear) {
//                        for (int j = 0; j <= endMonth; j++) {
//                            if (j < 9) {
//                                date = i + "-0" + (j + 1);
//                            } else {
//                                date = i + "-" + (j + 1);
//                            }
//                            list.add(date);
//                        }
//                    } else {
//                        for (int j = 0; j < 12; j++) {
//                            if (j < 9) {
//                                date = i + "-0" + (j + 1);
//                            } else {
//                                date = i + "-" + (j + 1);
//                            }
//                            list.add(date);
//                        }
//                    }
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return list;
//    }
//
//    /**
//     * 获取月的前N个月份
//     *
//     * @param date 时间
//     * @param i
//     * @return yyyy-MM
//     */
//    public static String getLastMonths(Date date, int i) {
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
//        Calendar c = Calendar.getInstance();
//        c.setTime(date);
//        c.add(Calendar.MONTH, -i);
//        Date m = c.getTime();
//        return sdf.format(m);
//    }
//
//    /**
//     * 判断当前时间距离第二天凌晨的秒数
//     *
//     * @return 返回值单位为[s:秒]
//     */
//    public static Long getSecondsNextEarlyMorning() {
//        Calendar cal = Calendar.getInstance();
//        cal.add(Calendar.DAY_OF_YEAR, 1);
//        cal.set(Calendar.HOUR_OF_DAY, 0);
//        cal.set(Calendar.SECOND, 0);
//        cal.set(Calendar.MINUTE, 0);
//        cal.set(Calendar.MILLISECOND, 0);
//        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000L;
//    }
//
//    /**
//     * 根据传递的月份字符串,返回月份的开始时间或则结束时间
//     *
//     * @param monthStr 月份字符串 2020-10
//     * @param ifFirst  是否开始时间
//     * @return
//     */
//    public static LocalDateTime getMonthStartEndStr(String monthStr, Boolean ifFirst) {
//        if (ifFirst) {
//            return LocalDateTime.parse(monthStr + "-01 00:00:00", FORMATTER);
//        } else {
//            LocalDate localDate = LocalDate.parse(monthStr + "-01");
//            return LocalDateTime.parse(localDate.with(TemporalAdjusters.lastDayOfMonth()).toString() + " 23:59:59", FORMATTER);
//        }
//    }
//
//    /**
//     * 根据传递的月份字符串,返回月份的开始时间或则结束时间
//     *
//     * @param yearStr 年字符串 2020
//     * @param ifFirst 是否开始时间
//     * @return
//     */
//    public static LocalDateTime getYearStartEndStr(String yearStr, Boolean ifFirst) {
//        if (ifFirst) {
//            return LocalDateTime.parse(yearStr + "-01-01 00:00:00", FORMATTER);
//        } else {
//            LocalDate localDate = LocalDate.parse(yearStr + "-12-01");
//            return LocalDateTime.parse(localDate.with(TemporalAdjusters.lastDayOfMonth()).toString() + " 23:59:59", FORMATTER);
//        }
//    }
//
//    /**
//     * 获取2个LocalDateTime的时间差(ms)
//     *
//     * @param start 开始时间
//     * @param end   结束时间
//     * @return
//     */
//    public static Long timeDifference(LocalDateTime start, LocalDateTime end) {
//        return end.toInstant(ZoneOffset.of("+8")).toEpochMilli() - start.toInstant(ZoneOffset.of("+8")).toEpochMilli();
//    }
//
//    /**
//     * LocalDateTime转Date
//     *
//     * @param localDateTime
//     * @return
//     */
//    public static Date ldtToDate(LocalDateTime localDateTime) {
//        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
//    }
//
//
//    /**
//     * 字符串转LocalDateTime
//     *
//     * @param strTime 时间字符串 yyyy-MM-dd HH:mm:ss
//     * @return
//     */
//    public static LocalDateTime strToLocalDateTime(String strTime) {
//        return LocalDateTime.parse(strTime, FORMATTER);
//    }
//
//    /**
//     * java8字符串准时间
//     *
//     * @param strTime 字符串时间
//     * @return
//     */
//    public static Date parse8DateTime(String strTime) {
//        return ldtToDate(strToLocalDateTime(strTime));
//    }
//
//
//    /**
//     * java8 时间戳转时间
//     *
//     * @param time
//     * @return
//     */
//    public static Date timestampOfDate(Long time) {
//        return ldtToDate(Instant.ofEpochMilli(time).atZone(ZoneId.of("Asia/Shanghai")).toLocalDateTime());
//    }
//
//}
